package middleware

import (
	"bytes"
	"github.com/gin-gonic/gin"
	"github.com/sirupsen/logrus"
	"io"
)

// GlobalErrorHandler 全局错误处理中间件
func GlobalErrorHandler() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 读取 Body 内容
		body, _ := io.ReadAll(c.Request.Body)
		// 重新设置 Body，以便后续正常读取（比如 ShouldBindJSON）
		c.Request.Body = io.NopCloser(bytes.NewBuffer(body))
		c.Next()
		// 获取所有错误
		if len(c.Errors) > 0 {
			// 获取请求参数

			// 记录每个错误
			for _, err := range c.Errors {
				logrus.WithFields(logrus.Fields{
					"method": c.Request.Method,
					"path":   c.Request.URL.Path,
					"params": string(body),
					"error":  err.Error(),
				}).Error("请求处理失败")
			}
		}
	}
}
